Gere sinais sintéticos que simulem a forma de onda do ciclo respiratório, de acordo a faixa etária:
library(stringr)
genBreathing <- function(duration, sampling_time, verbose_age)
{
weeks <- 0
months <- 0
years <- 0
# separate verbose age into occurrences
splitted_age <- unlist(str_extract_all(verbose_age, pattern="\\b(\\w+=\\w+)\\b"))
for(itr in length(splitted_age))
{
# extract the name and number of each occurrence
all <- unlist(str_extract_all(splitted_age[itr], pattern="\\b(\\w+)\\b"))
word <- all[1]
number <- strtoi(all[2])
# age in days is irrelevant
if(word=='weeks'){weeks <- weeks+number}
if(word=='months'){months <- months+number}
if(word=='years'){years <- years+number}
}
while(weeks>=5) # 1 month = 5 weeks
{
weeks <- weeks-5
months <- months+1
}
while(months>=12) # 1 year = 12 months
{
months <- months-12
years <- years+1
}
# define frequency based in age (max of range given)
if((years==0 && months==1 && weeks<=1) || (years==0 && months==0 && weeks<=6)){freq <- 40} # cycles/min
else if(years==0 && months<=6) {freq <- (25+40)/2} # cycles/min
else if(years<=3) {freq <- 30} # cycles/min
else if(years<=6) {freq <- 25} # cycles/min
else if(years<=10) {freq <- 23} # cycles/min
else if(years<65) {freq <- 18} # cycles/min
else if(years<80) {freq <- 28} # cycles/min
else {freq <- 30} # Hz
f <- freq/60 # convert freq to Hz
t <- seq(from=0, to=duration-sampling_time, by=sampling_time)
signal <- sin(2*pi*f*t)
return(signal)
}A função genBreathing gera um sinal do ciclo respiratório de acordo com a especificação anterior. Seus parâmetros são a duração do sinal em segundos e o tempo de amostragem. O terceiro parâmetro é uma string que identifica a idade de acordo com alguns exemplos abaixo:
verbose_age = 'weeks=4';verbose_age = 'months=2, weeks=3'verbose_age = 'years=42'Esse parâmetro é acumulativo, então qualquer sequência de idades composta por semanas, meses e anos podem ser inseridas (obs: 5 semanas são consideradas como 1 mês e 12 mês são considerados como 1 ano). Abaixo são inicializados alguns sinais para cada uma das categorias de idade especificadas.
duration = 60 # 1 min
sampling_time = 0.001 # 1 ms
t <- seq(from=0, to=duration-sampling_time, by=sampling_time)
array.cat <- vector("list", 8)
array.title <- vector("list", 8)
array.cat[[1]] <- genBreathing(duration, sampling_time, verbose_age='weeks=6')
array.cat[[2]] <- genBreathing(duration, sampling_time, verbose_age='months=6')
array.cat[[3]] <- genBreathing(duration, sampling_time, verbose_age='years=3')
array.cat[[4]] <- genBreathing(duration, sampling_time, verbose_age='years=6')
array.cat[[5]] <- genBreathing(duration, sampling_time, verbose_age='years=10')
array.cat[[6]] <- genBreathing(duration, sampling_time, verbose_age='years=42')
array.cat[[7]] <- genBreathing(duration, sampling_time, verbose_age='years=70')
array.cat[[8]] <- genBreathing(duration, sampling_time, verbose_age='years=90')
array.title[[1]] <- 'Ciclo respiratório: 6 semanas de idade'
array.title[[2]] <- 'Ciclo respiratório: 6 meses de idade'
array.title[[3]] <- 'Ciclo respiratório: 3 anos de idade'
array.title[[4]] <- 'Ciclo respiratório: 6 anos de idade'
array.title[[5]] <- 'Ciclo respiratório: 10 anos de idade'
array.title[[6]] <- 'Ciclo respiratório: 42 anos de idade'
array.title[[7]] <- 'Ciclo respiratório: 70 anos de idade'
array.title[[8]] <- 'Ciclo respiratório: 90 anos de idade'Utilize a bliblioteca dygraph para plotar um gráfico para cada um dos sinais simulados na questão 1. Adicione legendas para os eixos x e y de cada gráfico.
library(dygraphs)
library(htmltools)
timeWindow <- c(0,10) # 0 to 10s
usingDygraph = function(i){
plotResult <- data.frame(time=t, array.cat[i]) %>%
dygraph(group='breathing', xlab='Tempo (s)', ylab='Intensidade da respiração', main=array.title[i],
width=400, height=300) %>%
dyRangeSelector(dateWindow=timeWindow)
htmltools::tags$div(plotResult, style = "padding:10px; width: 450px; display:inline-block;")
}
res <- lapply(1:8, usingDygraph)
htmltools::tagList(res)Utilize a função ggplot para plotar um gráfico para cada um dos sinais simulados na questão 1. Adicione legendas para os eixos x e y de cada gráfico.
library(ggplot2)
library(magrittr)
library(multipanelfigure)
usingGgplot = function(i){
df <- data.frame(time=t, breath=array.cat[[i]])
plotResult <- ggplot(data=df, aes(x=time, y=breath)) +
labs(x='Tempo (s)', y='Intensidade da respiração') +
ggtitle(array.title[i]) +
geom_line()
return(plotResult)
}
usingGgplot(1)usingGgplot(2)usingGgplot(3)usingGgplot(4)usingGgplot(5)usingGgplot(6)usingGgplot(7)usingGgplot(8)Escolha um sinal simulado na questão 1, e plote-o utilizando a função dyStemSeries. Por que há um intervalo temporal entre cada amostra?
data.frame(time=t, array.cat[1]) %>%
dygraph(xlab='Tempo (s)', ylab='Intensidade da respiração', main=array.title[1]) %>%
dyOptions(stemPlot=TRUE)timeWindow <- c(0,10) # 0 to 10s
usingDyStemSeries = function(i){ plotResult <- data.frame(time=t, array.cat[i]) %>% dygraph(group=‘breathing’, xlab=‘Tempo (s)’, ylab=‘Intensidade da respiração’, main=array.title[i]) %>% dyRangeSelector(dateWindow=timeWindow) %>% dyOptions(stemPlot=TRUE) }
Explique a estrutura básica de um arquivo EDF []((https://www.edfplus.info/specs/edf.html).
Repita todos os exercícios apresentados neste módulo. Os comandos utilizados devem ser inseridos como resposta a esta questão.
A base de dados disponível na plataforma Moodle foi coletada utilizando-se o dispositivo TREMSEN (Precise Tremor Sensing), que é um dispositivo para a coleta de dados inerciais (i.e., movimentos).
A coleta de dados foi executada considerando os seguinte protocolo:
Considerando as informações dadas, você deve: